﻿CREATE FUNCTION [Cucina].[SF_GetCodiceComanda]
(
	@PuntoDistribuzioneID int, 
	@DataOraComanda datetime
)
RETURNS nvarchar(30)
AS
BEGIN
	DECLARE @N int
	SELECT @N = ISNULL(NumeriPerLettera, 25)
	FROM Cucina.PuntoDistribuzione
	WHERE PuntoDistribuzioneID = @PuntoDistribuzioneID

	-- Il "cambio di giorno" è fissato alle 3 di notte
	DECLARE @MinDate DATETIME = DATEADD(HOUR, 3, CAST(CAST(DATEADD(HOUR, -3, @DataOraComanda) AS DATE) AS DATETIME))
	DECLARE @MaxDate DATETIME = DATEADD(MILLISECOND, -3, DATEADD(HOUR, 24, @MinDate))

	DECLARE @Curr int
	SELECT @Curr = COUNT(*) FROM Cucina.Comanda
	WHERE PuntoDistribuzioneID = @PuntoDistribuzioneID 
		-- AND DataOra > DATEADD(HOUR, 3, CAST(CAST(@DataOraComanda AS date) AS datetime))
		AND DataOra BETWEEN @MinDate AND @MaxDate

	DECLARE @LetteraChar int = 65 + (@Curr/@N % 26)
	DECLARE @Numero int = @Curr % @N + 1

	RETURN CHAR(@LetteraChar) + 
		REPLICATE('0', 
			LEN(CAST(@N as varchar)) - LEN(CAST(@Numero AS VARCHAR))) 
		+ CAST(@Numero AS varchar)
END